package com.mf.converter;

import com.alibaba.excel.converters.Converter;
import com.alibaba.excel.metadata.GlobalConfiguration;
import com.alibaba.excel.metadata.data.ReadCellData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.metadata.property.ExcelContentProperty;

/**
 * @Author: lmf
 * @Create: 2024/6/25 11:17
 * Description:
 */
/**
 * 性别转换器，用于在EasyExcel中将性别字符串与整型数值之间进行相互转换。
 * 这是一个自定义的转换器，实现了Converter接口，用于处理特定的性别数据转换。
 */
public class EasyExcelGenderConverter implements Converter<Integer> {

    /**
     * 将Excel中的性别字符串转换为对应的整型数值。 (一般导入时使用)
     *
     * @param cellData 读取到的单元格数据，包含性别字符串。
     * @param contentProperty 单元格的属性配置，用于读取时的配置。
     * @param globalConfiguration 全局配置信息，用于读取时的配置。
     * @return 对应的性别整型数值：1代表男，2代表女，0代表未知。
     * @throws Exception 如果转换失败抛出异常。
     */
    @Override
    public Integer convertToJavaData(ReadCellData<?> cellData, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        String value = cellData.getStringValue();
        return switch (value) {
            case "男" -> 1;
            case "女" -> 2;
            default -> 0;
        };
    }

    /**
     * 将整型的性别数值转换为对应的性别字符串。 (一般导出时使用)
     *
     * @param value 性别整型数值：1代表男，2代表女，其他值代表未知。
     * @param contentProperty 单元格的属性配置，用于写入时的配置。
     * @param globalConfiguration 全局配置信息，用于写入时的配置。
     * @return 对应的性别字符串："男"、"女"或者"未知"。
     * @throws Exception 如果转换失败抛出异常。
     */
    @Override
    public WriteCellData<?> convertToExcelData(Integer value, ExcelContentProperty contentProperty, GlobalConfiguration globalConfiguration) throws Exception {
        switch (value){
            case 1 -> {
                return new WriteCellData<>("男");
            }
            case 2 -> {
                return new WriteCellData<>("女");
            }
            default -> {
                return new WriteCellData<>("未知");
            }
        }
    }
}

